import 'dart:io';
import 'package:flutter/foundation.dart';
import 'dart:developer' as developer;

class AppConfig {
  // Server configuration
  // 后端服务端口配置
  // 
  // Flutter 连接 localhost 的限制说明：
  // 1. iOS 模拟器: 可以使用 127.0.0.1 或 localhost
  // 2. iOS 真机: 不能使用 127.0.0.1，需要使用 Mac 的实际 IP 地址
  // 3. Android 模拟器: 需要使用 10.0.2.2 来访问主机的 localhost
  // 4. Android 真机: 需要使用电脑的实际 IP 地址
  // 
  // 可以通过环境变量 API_BASE_URL 覆盖，例如：
  // flutter run --dart-define=API_BASE_URL=http://192.168.1.100
  static String get baseUrl {
    // 优先使用环境变量（支持完整 URL，如 http://192.168.1.100）
    const envUrl = String.fromEnvironment('API_BASE_URL');
      if (envUrl.isNotEmpty) {
      // 如果环境变量包含协议，直接返回；否则添加 http://
      final url = envUrl.startsWith('http://') || envUrl.startsWith('https://')
          ? envUrl
          : 'http://$envUrl';
      return url;
    }
    
    // 根据平台选择正确的地址
    String selectedUrl;
    
    
    // 统一使用 127.0.0.1（适用于 iOS 模拟器、macOS、Linux、Windows）
    // 注意：
    // - Android 模拟器需要使用 10.0.2.2 来访问主机的 localhost
    // - iOS 真机不能使用 127.0.0.1，需要使用 Mac 的实际 IP 地址
    // - Android 真机需要使用电脑的实际 IP 地址
    // 如果遇到连接问题，请使用环境变量覆盖：flutter run --dart-define=API_BASE_URL=http://YOUR_IP
    if (Platform.isAndroid) {
      // Android 模拟器特殊处理：需要使用 10.0.2.2 来访问主机的 localhost
      // Android 真机需要使用电脑的实际 IP 地址（通过环境变量设置）
      selectedUrl = 'http://10.0.2.2';
    } else {
      // iOS 模拟器、macOS、Linux、Windows 都使用 127.0.0.1
      selectedUrl = 'http://127.0.0.1';
    }
    
    return selectedUrl;
  }
  
  static const int serverPort = 3000;  // im-server HTTP API 端口
  static const int connectPort = 3001; // im-connect WebSocket 端口
  
  // API endpoints
  // 确保 URL 格式正确：如果 baseUrl 已经包含端口，不再添加
  static String get apiBaseUrl {
    final url = baseUrl;
    // 检查 baseUrl 是否已经包含端口
    final uri = Uri.tryParse(url);
    if (uri != null && uri.hasPort && uri.port > 0) {
      // 如果已经包含端口，直接拼接路径
      return '$url/api';
    } else {
      // 如果没有端口，添加端口
      return '$url:$serverPort/api';
    }
  }
  
  static String get wsBaseUrl {
    final url = baseUrl;
    // 检查 baseUrl 是否已经包含端口
    final uri = Uri.tryParse(url);
    if (uri != null && uri.hasPort && uri.port > 0) {
      // 如果已经包含端口，直接拼接路径
      return '$url/ws';
    } else {
      // 如果没有端口，添加端口
      return '$url:$connectPort/ws';
    }
  }
  
  // WebSocket endpoint
  static String get wsConnectUrl => '$wsBaseUrl/connect';
  
  // Timeout settings
  static const Duration connectTimeout = Duration(seconds: 30);
  static const Duration receiveTimeout = Duration(seconds: 30);
  
  // Storage keys
  static const String keyToken = 'auth_token';
  static const String keyUserId = 'user_id';
  static const String keyUserInfo = 'user_info';
  static const String keySubscriptionId = 'subscription_id';
}
